package com.jxx.algorithm.leetcode.medium;

/**
 * @Author: Jiangxx
 * @Date: 2021/12/07
 * @Description: Z字形变换：将一个给定字符串 s 根据给定的行数 numRows ，以从上往下、从左到右进行Z字形排列。
 * 比如输入字符串为 "PAYPALISHIRING"行数为 3 时，排列如下：
 * P   A   H   N
 * A P L S I I G
 * Y   I   R
 * 之后，你的输出需要从左往右逐行读取，产生出一个新的字符串，比如："PAHNAPLSIIGYIR"。
 * 请你实现这个将字符串进行指定行数变换的函数：
 * string convert(string s, int numRows);
 *
 * 来源：力扣（LeetCode）
 */
public class Solution04 {

    public static void main(String[] args) {
        String s = "AB";
        System.out.println(convert(s,1));
    }
    public static String convert(String s, int numRows) {
        if (numRows == 1) {
            return s;
        }
        int length = s.length();
        char[][] chars = new char[numRows][length];
        int column = 0;
        int row = 0;
        int i = 0;
        while (i < length) {
            if (row < numRows) {
                while(row < numRows && i < length) {
                    chars[row][column] = s.charAt(i++);
                    row++;
                }
            } else {
                row--;
                while(row > 0 && i < length) {
                    column++;
                    chars[--row][column] = s.charAt(i++);
                }
                row = 1;
            }
        }
        StringBuilder builder = new StringBuilder();
        for (int m = 0; m < chars.length; m++){
            for (int n = 0; n < chars[m].length; n++) {
                if (chars[m][n] == '\u0000') {
                    continue;
                }
                builder.append(chars[m][n] + "");
            }
        }
        return builder.toString();
    }
}
